#!/bin/bash

# Opticeye 瞳孔圆检测系统启动脚本
# 该脚本自动完成以下任务：
# 1. 启动llama.cpp HTTP API服务
# 2. 激活Python虚拟环境
# 3. 启动瞳孔检测程序

# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${GREEN}=== Opticeye 瞳孔圆检测系统启动脚本 ===${NC}"
echo

# 检查是否在Linux系统上运行
if [[ "$OSTYPE" != "linux-gnu"* ]]; then
    echo -e "${RED}错误：此脚本仅适用于Linux系统${NC}"
    exit 1
fi

# 配置参数
VENV_PATH="myvenv"  # 虚拟环境路径
MODEL_PATH="~/Qwen3-0.6B-Q4_0.gguf"  # 模型文件路径
LLAMA_PORT=9090  # llama服务端口
PYTHON_SCRIPT="circle_detection.py"  # Python主程序

# 检查必要的文件和目录
echo -e "${YELLOW}正在检查环境...${NC}"

# 检查Python程序是否存在
if [ ! -f "$PYTHON_SCRIPT" ]; then
    echo -e "${RED}错误：找不到Python程序 $PYTHON_SCRIPT${NC}"
    exit 1
fi

# 检查虚拟环境是否存在
if [ ! -d "$VENV_PATH" ]; then
    echo -e "${YELLOW}虚拟环境不存在，正在创建...${NC}"
    python3 -m venv "$VENV_PATH"
    if [ $? -ne 0 ]; then
        echo -e "${RED}创建虚拟环境失败，请检查Python3是否已安装${NC}"
        exit 1
    fi
    
    # 激活虚拟环境并安装依赖
    echo -e "${YELLOW}正在安装依赖...${NC}"
    source "$VENV_PATH/bin/activate"
    pip install opencv-python numpy matplotlib pillow requests
    if [ $? -ne 0 ]; then
        echo -e "${RED}安装依赖失败${NC}"
        exit 1
    fi
    deactivate
fi

# 启动llama.cpp HTTP API服务
echo -e "${YELLOW}正在启动llama.cpp服务...${NC}"

# 检查模型文件是否存在
if [ ! -f "$MODEL_PATH" ]; then
    echo -e "${RED}错误：找不到模型文件 $MODEL_PATH${NC}"
    echo -e "${YELLOW}请确保已下载量化后SmolLM2模型文件到 $MODEL_PATH${NC}"
    exit 1
fi

# 检查llama-server是否可用
if ! command -v llama-server &> /dev/null; then
    echo -e "${RED}错误：找不到llama-server命令${NC}"
    echo -e "${YELLOW}请安装llama.cpp：${NC}"
    echo "  git clone https://github.com/ggerganov/llama.cpp"
    echo "  cd llama.cpp && mkdir build && cd build && cmake .. && make -j8"
    exit 1
fi

# 启动llama-server
llama-server --model "$MODEL_PATH" --port "$LLAMA_PORT" --host 127.0.0.1 --n-gpu-layers 35 &
LLAMA_PID=$!

# 等待服务启动
echo -e "${YELLOW}等待llama服务启动...${NC}"
sleep 3

# 检查服务是否成功启动
if ! curl -s "http://127.0.0.1:$LLAMA_PORT/health" > /dev/null; then
    echo -e "${RED}llama服务启动失败，请检查日志${NC}"
    kill $LLAMA_PID 2>/dev/null
    exit 1
fi

echo -e "${GREEN}llama服务已启动，进程ID: $LLAMA_PID${NC}"

# 启动Python程序
echo -e "${YELLOW}正在启动瞳孔检测程序...${NC}"
source "$VENV_PATH/bin/activate"
python "$PYTHON_SCRIPT"

# 程序结束后清理
echo -e "${YELLOW}正在清理...${NC}"
kill $LLAMA_PID 2>/dev/null
echo -e "${GREEN}程序已退出，服务已停止${NC}"